%% 16天线下，窄波束的波束增益为24.1dB

function [Pr_dBm,Pr_dBm2] = linkbudget(d,Gt_dB_wide,Gt_dB_narrow,sw,targetNum)

%% 参数设置
f = 6.9e9;               % 频率，Hz（例如 2.4 GHz）
d0 = 100;                  % 参考距离，m
P_total = 20;            % 发射功率，dBm
Pt_wide = 5;
Pr_dBm2 = 0;
% 功率分配问题待解决
if sw == 1               % 宽波束
    Pt_dBm = P_total;         
else
    %Pt_wide = P_total - targetNum*(P_total+Gt_dB_wide-Gt_dB_narrow);
    Pt_dBm = (P_total-Pt_wide)/targetNum;         % 发射功率，dBm
end

%Gt_dB = 14;             % 发射天线增益，dBi
Gr_dB = 1;               % 接收天线增益，dBi
%d = 1:1:1000;           % 传输距离（m）

% 模型选择
n = 2.7;                 % 路径损耗指数（Free space: 2, 城市中典型值：2.7~4）
shadowing_std = 6;       % 阴影衰落标准差（dB）
enable_shadowing = true; % 是否启用阴影衰落

%% 计算自由空间路径损耗 (FSPL)
c = 3e8;                            % 光速
lambda = c / f;                    % 波长
FSPL_dB = 20*log10(4*pi*d/lambda); % 自由空间损耗（dB）

%% 对数距离路径损耗模型（含阴影）可以通过引入随环境而改变的路径损耗指数，来修正自由空间路径损耗模型
PL_dB = FSPL_dB + 10*n*log10(d/d0); % 均值路径损耗
if enable_shadowing
    shadowing = shadowing_std * randn(size(d));      % 高斯随机扰动
    PL_dB = PL_dB + shadowing;                       % 加入阴影衰落
end

%% 接收功率计算
if sw == 1
    Pr_dBm = Pt_dBm + Gt_dB_wide + Gr_dB - PL_dB;
    Pr_dBm2 = Pt_wide + Gt_dB_wide + Gr_dB - PL_dB;
else
    Pr_dBm = Pt_dBm + Gt_dB_narrow + Gr_dB - PL_dB;
end
end
% %% 绘图显示
% figure;
% plot(d, PL_dB, 'b-', 'LineWidth', 2); hold on;
% plot(d, FSPL_dB, 'r--', 'LineWidth', 1.5);
% grid on;
% xlabel('距离 d (m)'); ylabel('路径损耗 (dB)');
% legend('对数距离损耗 + 阴影', '自由空间损耗');
% title('链路路径损耗模型');
% 
% figure;
% plot(d, Pr_dBm, 'g-', 'LineWidth', 2);
% grid on;
% xlabel('距离 d (m)'); ylabel('接收功率 P_r (dBm)');
% title('接收功率随距离变化');
